package br.com.jmmarca.controller;

//import br.com.jmmarca.model.Produto;
import java.util.ArrayList;
import java.util.List;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TabHost.TabSpec;
import android.widget.Toast;
import br.com.jmmarca.dao.impl.ProdutoDAO;
import br.com.jmmarca.model.Produto;
import br.com.jmmarca.util.Utils;

public class CrudProduto extends GenericTabActivity {

	private static final String TAG_LOG = "App_crudProduto";
	List<Produto> listaProdutos = new ArrayList<Produto>();
	ArrayAdapter<Produto> adaptador = null;
	ProdutoDAO gerenciador;
	Integer idRegistro = null;

	// Campos do formulario
	EditText nome = null;
	EditText codigo = null;
	EditText descricao = null;
	EditText caracteristica = null;
	EditText beneficio = null;
	EditText valor = null;

	ListView listaProdutosListView;
	Produto produtoSelecionado;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.produto_main);
		gerenciador = ProdutoDAO.getInstance(getApplicationContext());

		// Campos do formulario
		codigo = (EditText) findViewById(R.id.txt_prd_codigo);
		nome = (EditText) findViewById(R.id.txt_prd_nome);
		descricao = (EditText) findViewById(R.id.txt_prd_descricao);
		caracteristica = (EditText) findViewById(R.id.txt_prd_caracteristica);
		beneficio = (EditText) findViewById(R.id.txt_prd_beneficio);
		valor = (EditText) findViewById(R.id.txt_prd_valor);

		Button salvar = (Button) findViewById(R.id.btnSalvar);
		salvar.setOnClickListener(onSave);
		Button cancelar = (Button) findViewById(R.id.btnCancelar);
		cancelar.setOnClickListener(onCancel);

		TabSpec descritor = getTabHost().newTabSpec("tag1");
		descritor.setContent(R.id.Produtos);
		descritor.setIndicator("Listar",
				getResources().getDrawable(R.drawable.lista));
		getTabHost().addTab(descritor);

		descritor = getTabHost().newTabSpec("tag2");
		descritor.setContent(R.id.detalhesProduto);
		descritor.setIndicator("Cadastrar",
				getResources().getDrawable(R.drawable.add));
		getTabHost().addTab(descritor);

		getTabHost().setCurrentTab(0);

		listaProdutosListView = (ListView) findViewById(R.id.Produtos);
		registerForContextMenu(listaProdutosListView);

		carregaListagem();
	}

	public void carregaFormulario() {
		Log.w(TAG_LOG, "carregaFormulario");
		if (idRegistro != null) {

			Produto Produto = gerenciador.encontrar(idRegistro);
			if (Produto != null) {
				codigo.setText(Produto.getCodigo());
				nome.setText(Produto.getNome());
				descricao.setText(Produto.getDescricao());
				caracteristica.setText(Produto.getCaracteristica());
				beneficio.setText(Produto.getBeneficio());
				valor.setText(Produto.getValor());

			} else {
				Utils.msg(getApplicationContext(), "Registro não encontrado");
			}
		} else {
			codigo.setText("");
			nome.setText("");
			descricao.setText("");
			caracteristica.setText("");
			beneficio.setText("");
			valor.setText("0,00");

		}
	}

	private void carregaListagem() {

		listaProdutos = gerenciador.listar();
		ArrayAdapter<Produto> adapter = new ArrayAdapter<Produto>(this,
				android.R.layout.simple_list_item_1, listaProdutos);

		listaProdutosListView.setAdapter(adapter);

		listaProdutosListView.setOnItemClickListener(onListClick);
	}

	private void salvarCadastro() {
		if (codigo.getText().toString().equals("")) {
			Toast msg = Toast.makeText(this, "O Campo Nome é requerido!",
					Toast.LENGTH_LONG);
			msg.show();
			return;
		}

		Produto Produto = new Produto(idRegistro);
		Produto.setNome(nome.getText().toString());
		Produto.setCodigo(codigo.getText().toString());
		Produto.setDescricao(descricao.getText().toString());
		Produto.setCaracteristica(caracteristica.getText().toString());
		Produto.setBeneficio(beneficio.getText().toString());
		Produto.setValor(valor.getText().toString());
		gerenciador.salvar(Produto);
		// Atualiza lista
		listaProdutos = gerenciador.listar();

		carregaListagem();
		getTabHost().setCurrentTab(0);
		// Registro selecionado
		idRegistro = null;
		carregaFormulario();

		Utils.msg(getApplicationContext(), "Dado Salvo com Sucesso!");
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
	}

	// Acao do botao listar
	private OnItemClickListener onListClick = new OnItemClickListener() {
		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			Produto ev = listaProdutos.get((int) id);
			idRegistro = ev.getId();
			if (idRegistro != null) {
				carregaFormulario();
			}

			getTabHost().setCurrentTab(1);
		}
	};
	// acao do botao salvar
	private OnClickListener onSave = new OnClickListener() {

		@Override
		public void onClick(View arg0) {
			salvarCadastro();
		}
	};
	// Acao do botao cancelar
	private OnClickListener onCancel = new OnClickListener() {
		@Override
		public void onClick(View arg0) {
			idRegistro = null;
			carregaFormulario();
			carregaListagem();
			// Volta para Listagem
			getTabHost().setCurrentTab(0);
		}
	};

	/**
	 * MENU DA LISTAGEM
	 */
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		if (v.getId() == R.id.Produtos) {
			AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo;
			produtoSelecionado = (Produto) listaProdutosListView
					.getItemAtPosition(acmi.position);
			MenuInflater inflater = getMenuInflater();
			inflater.inflate(R.menu.menu_listagem_produto, menu);

		}
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.menu_prd_alterar:
			// add stuff here
			idRegistro = produtoSelecionado.getId();
			if (idRegistro != null) {
				carregaFormulario();
			}

			getTabHost().setCurrentTab(1);

			return true;
		case R.id.menu_prd_remover:
			try {
				gerenciador.remover(produtoSelecionado);
				Utils.msg(getApplicationContext(),
						"Registro Removido com Sucesso!");
				carregaListagem();
			} catch (Exception e) {
				Utils.msg(getApplicationContext(),
						"Não foi possivel remover, verifique se não existe dependencias!");
			}
			return true;
		case R.id.menu_prd_galeria_fotos:
			Intent goToNextActivity = new Intent(getApplicationContext(),
					CrudProdutoMidiaFoto.class).putExtra("id_produto", produtoSelecionado.getId());
			startActivity(goToNextActivity);
			
			// remove stuff here
			return true;
		case R.id.menu_prd_galeria_videos:
			// remove stuff here
			return true;
		default:
			return super.onContextItemSelected(item);
		}
	}

}